package model

import (
	"manager/model/entity"
	"manager/model/po"
)

type Point struct {
	X float64 `json:"lng"` // 经度
	Y float64 `json:"lat"` // 维度
}

// EbikeSet 车辆设置
type EbikeSet struct {
	PowerWarn            *int   `json:"power_warn"`            // 电量提醒
	PowerValue           *int   `json:"power_value"`           // 设置提醒值1~99
	LeaveLock            *int   `json:"leave_lock"`            // 离车自动锁车 0 开启 1关闭
	LeaveCountdown       *int   `json:"leave_countdown"`       // 锁车倒计时
	OpenLock             *int   `json:"open_lock"`             // 无感开锁
	OpenLockDistance     *int   `json:"open_lock_distance"`    // 开锁距离
	HitchsUp             *int   `json:"hitchs_up"`             // 故障上报
	Alarm                *int   `json:"alarm"`                 // 被盗告警 0 推送 1 忽略
	ElectronicFence      *int   `json:"electronic_fence"`      // 电子围栏 0 开启，1 关闭
	FenceCenter          *Point `json:"fence_center"`          // 围栏中心点
	FenceRadius          *int   `json:"fence_radius"`          // 围栏半径
	VibrationSensitivity *int   `json:"vibration_sensitivity"` // 报警器震动灵敏度（震动），等级1~3，值越大越灵敏。
}

// MsgSet 防盗设置
type MsgSet struct {
	StealAlarm    *int `json:"steal_alarm"`    // 防盗告警
	Hitchs        *int `json:"hitchs"`         // 故障
	Shake         *int `json:"shake"`          // 振动
	BlackOut      *int `json:"black_out"`      // 断电
	ChargeMonitor *int `json:"charge_monitor"` // 充电检测
	Handrail      *int `json:"handrail"`       // 电子围栏
}

type SettingCreateRequest struct {
	UserId  int64 `json:"user_id"`  // 用户Id
	EbikeId int64 `json:"ebike_id"` // 车辆id
}

type SettingUpdateRequest struct {
	Id              int64     `json:"id"`
	UserId          *int64    `json:"user_id"`                   // 用户ID
	EbikeId         *int64    `json:"ebike_id"`                  // 车辆ID
	EbikeSet        *EbikeSet `gorm:"ebike_set"json:"ebike_set"` // 电量提醒
	HillAssist      *int      `json:"hill_assist"`               // 上坡辅助 0 开启 1关闭
	HillAssistRange *int      `json:"hill_assist_range"`         // 上坡辅助设置范围时速？（待确认）
	FlyCar          *int      `json:"fly_car"`                   // 防飞车 0 开启 1关闭
	MsgSet          *MsgSet   `json:"msg_set"`                   // 防盗告警
	Type            *int      `json:"type"`                      // 0 用户 1 车辆
}

type SettingListRequest struct {
	Index int `json:"index"`
	Size  int `json:"size"`

	Id      int64 `json:"id"`
	EbikeId int64 `json:"ebike_id"`
}

type SettingListResponse struct {
	Total int            `json:"total"`
	List  []*SettingInfo `json:"list"`
}

type SettingInfo struct {
	Id int64 `json:"id"`

	UserId int64 `json:"user_id"`

	EbikeId int64 `json:"ebike_id"`

	EbikeSet po.EbikeSet `json:"ebike_set"`

	HillAssist int `json:"hill_assist"`

	HillAssistRange int `json:"hill_assist_range"`

	FlyCar int `json:"fly_car"`

	MsgSet po.MsgSet `json:"msg_set"`

	Type int `json:"type"`

	CreatedAt int64 `json:"created_at"`

	UpdatedAt int64 `json:"updated_at"`
}

type SettingDeleteRequest struct {
	Id      int64 `json:"id"`
	EbikeId int64 `json:"ebike_id"`
}

func SettingsEntityToDto(settings []*entity.Setting) []*SettingInfo {
	out := make([]*SettingInfo, 0, len(settings))
	for _, c := range settings {
		out = append(out, SettingEntityToDto(c))
	}
	return out
}

func SettingEntityToDto(e *entity.Setting) *SettingInfo {
	return &SettingInfo{

		Id: e.Id,

		UserId: e.UserId,

		EbikeId: e.EbikeId,

		EbikeSet: *e.EbikeSet,

		HillAssist: e.HillAssist,

		HillAssistRange: e.HillAssistRange,

		FlyCar: e.FlyCar,

		MsgSet: *e.MsgSet,

		Type: e.Type,

		CreatedAt: e.CreatedAt,

		UpdatedAt: e.UpdatedAt,
	}
}
